package string;

/**
 * String 不适合频繁修改，内存开销大，性能低下。
 * 为了解决这个问题，Java提供了一个用于修改字符串的API：StringBuilder
 *
 * StringBuilder内部维护一个可变的char数组，修改性能高，开销小。并且提供了便于修改
 * 字符的相关操作：增删改插等
 */
public class StringBuilderDeno {
    public static void main(String[] args) {
        String str ="好好学习Java";

        //创建StringBuilder常见的构造器
        //  StringBuilder builder = new StringBuilder（）;//内部默认表示一个空字符串
        //创建StringBuilder的同时将给定的字符串内容复制一份到内部
        StringBuilder builder = new StringBuilder(str);
        //StringBuffer 是并发安全的，String Builder不是并发安全的

        /**
         *  增
         *    好好学习 java
         *        v
         *    好好学习Java,为了找到好工作！
         *
         */
        builder.append(",为找找到好工作！");
        System.out.println(str);//String是不变的，内容没有发生改变
        System.out.println(builder);//改变的是StringBuilder内部字符串的内容

        //  改 ： 好好学习Java，就是为了改变世界!
        // 将 builder 内部字符串从下标9 开始到16（不含）的内容替换为给定的字符串
        builder.replace(9,16,"就是为了改变世界");
        System.out.println(builder);

        /**
         *  删
         *  好好学习Java,就是为了改变世界！
         *  ,就是为了改变世界！
         */
        builder.delete(0,8);
        System.out.println(builder);

        /**
         * 插
         * ，就是为了改变世界！
         * 活着，就是为了改变世界
         */
        builder.insert(0,"活着");
      // builder.insert(2," huozhe ");
        System.out.println(builder);

        //反转字符串内容
        builder.reverse();
        System.out.println(builder);

        //StringBuilder 只是修改字符串的工具类并非String本身
        //当使用StringBuilder修改内容后，可以调用同String方法得到内部的字符串内容

        String line = builder.toString();
        System.out.println(line);

        /*
        String a ="12346789";
        StringBuilder a1 = new  StringBuilder(a);
        a1.reverse();
        System.out.println(a1);

         */


    }
}
